package com.hdjd.service;

import com.hdjd.entities.*;
import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * @author 刘子强
 * 2021/1/25 17:21
 */
public interface GoodsService {

    /**
     * 根据商家id查询该商家所有商品（也可以根据商品名称模糊查询，根据商品状态查询）
     * @param accId
     * @param goStatus
     * @param goNm
     * @param pageCurrent
     * @param pageSize
     * @return
     */
    public List<Goods> selectGoodsListByAccId(Integer accId, Integer goStatus, String goNm, Integer pageCurrent, Integer pageSize);

    /**
     * 新增商品
     * @param goods
     * @return
     */
    public boolean insertGoods(Goods goods);

    /**
     * 根据商品名称查询商品信息或者查询所有商品信息
     * @param goNm
     * @return
     */

    List<SellNum> selectGoodsListByGoNmOrSelectAll(Integer accId, String goNm, Integer pageCurrent, Integer pageSize);

    /**
     * 根据商品id更新商品信息
     * @param goods
     * @return
     */
    public boolean updateGoodsByGoId(Goods goods);

    /**
     * 根据商品id查询商品信息
     * @param goId
     * @return
     */
    public Goods selectGoodsByGoId(Integer goId);

    /**
     * 根据商品id上下架商品
     * @param goId
     * @param goStatus
     * @return
     */
    public boolean OnShelfAndOffShelfGoodsByGoId(Integer goId, Integer goStatus);

    /**
     * 商品进货，插入记录
     * @param goodsIn
     * @return
     */
    public boolean insertGoodsIn(GoodsIn goodsIn, Integer accId);

    /**
     * 新增退货记录
     * @param inId
     * @param retNum
     * @return
     */
    public boolean insertGoodsReturn(Integer inId, Integer retNum, Integer accId);

    /**
     * 插入商品图片
     * @param goId
     * @param img
     * @return
     */
    public boolean insertGoodsImg(Integer goId, String imgIds, String imgDefault, MultipartFile img, HttpServletRequest request);


    /**
     * 插入评价图片
     * @param opiId
     * @param img
     * @return
     */
    public boolean insertOpinionImg(Integer opiId, MultipartFile img, HttpServletRequest request);

    /**
     * 根据商品ID查询商品图片
     * @param goId
     * @return
     */
    List<String> selectGoodsImgUrl(Integer goId);

    /**
     * 根据商品ID获取库存数量
     * @param goId
     * @return
     */
    Integer getCurrentGoodsStockNumByGoId(Integer goId);

    /**
     * 根据商品Id获取该商品好评率
     * @param goId
     * @return
     */
    Integer getReputablyRatio(Integer goId);

    /**
     * 查询某商家所有进货记录（也可查询某段日期）
     * @return
     */
    public List<GoodsIn> selectGoodsInListByAccId(Integer accId, String startDate, String endDate, Integer pageCurrent, Integer pageSize);

    /**
     * 查询某商家所有退货记录（也可查询某段日期）
     * @return
     */
    public List<GoodsReturn> selectGoodsReturnListByAccId(Integer accId, String startDate, String endDate, Integer pageCurrent, Integer pageSize);


    /**
     * 根据商品Id查询商品的评价或者根据商品Id或者评价类型查询
     * @param goId
     * @return
     */
    List<Opinion> selectOpinionInfoByGoId(Integer goId,Integer opiType,Integer pageCurrent,Integer pageSize);

    /**
     * 根据商品Id查询商品的评价或者根据商品Id或者评价类型查询评价数
     * @param goId
     * @return
     */
    int selectOpinionNumByGoId(Integer goId,Integer opiType);

    /**
     * 根据商品Id和账户Id去购买商品
     * @param accId
     * @param goIds
     * @return
     */
    Integer buyGoodsByAccIdAndGoId(Integer accId,String[] goIds);

    /**
     * 商家进货后确认收货
     * @param inId
     * @return
     */
    boolean businessReceiveGoods(Integer inId);

    /**
     * 首页查询商品的总数
     * @param goNm
     * @param schoolId
     * @return
     */
    Integer selectAllGoodsNum(@Param("goNm") String goNm, @Param("schoolId") Integer schoolId);

    /**
     * 根据商品id 查询其图片集合
     * @param goId
     * @return
     */
    List<GoodsImg> selectGoodsImgListByGoId(@Param("goId") Integer goId);

    /**
     * 根据商家id查询某商家商品数量
     * @param accId
     * @param goStatus
     * @param goNm
     * @return
     */
    Integer countGoodsNumByAccId(Integer accId, Integer goStatus, String goNm);

    /**
     * 查询某商家进货记录数
     * @return
     */
    Integer countGoodsInNumByAccId( Integer accId,  String startDate,  String endDate);

    /**
     * 根据商家id统计商品退货记录数
     * @param accId
     * @param startDate
     * @param endDate
     * @return
     */
    Integer countGoodsReturnNumByAccId(Integer accId, String startDate, String endDate);

}
